/**
 * 通用元数据和基础类型定义
 * 包含时间、特效、动画、音频等通用类型，可被多个模块复用
 */

// ==================== 基础类型定义 ====================

/**
 * 记录了起始时间及持续长度的时间范围
 */
export interface Timerange {
    /** 起始时间, 单位为微秒 */
    start: number;
    /** 持续长度, 单位为微秒 */
    duration: number;
}

/**
 * 播放速度对象，目前只支持固定速度
 */
export interface Speed {
    /** 全局id，由程序自动生成 */
    global_id: string;
    /** 播放速度 */
    speed: number;
}

/**
 * 关键帧数据项
 */
export interface KeyframeItem {
    /** 关键帧时间点（相对于片段开始时间，单位：秒） */
    time: number;
    /** 关键帧值 */
    value: any;
    /** 插值类型 */
    interpolation?: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'bezier';
    /** 贝塞尔曲线控制点（当interpolation为bezier时使用） */
    bezier_points?: [number, number, number, number];
}

/**
 * 关键帧列表
 * 用于存储某个属性的所有关键帧数据
 */
export interface KeyframeList {
    /** 属性名称 */
    property: string;
    /** 关键帧数据列表 */
    keyframes: KeyframeItem[];
    /** 是否启用 */
    enabled: boolean;
}

/**
 * 素材片段的图像调节设置
 */
export interface ClipSettings {
    /** 图像不透明度，0-1 */
    alpha: number;
    /** 翻转设置 */
    flip: {
        /** 是否水平翻转 */
        horizontal: boolean;
        /** 是否垂直翻转 */
        vertical: boolean;
    };
    /** 顺时针旋转的角度，可正可负 */
    rotation: number;
    /** 缩放设置 */
    scale: {
        /** 水平缩放比例 */
        x: number;
        /** 垂直缩放比例 */
        y: number;
    };
    /** 位移设置 */
    transform: {
        /** 水平位移，单位为半个画布宽 */
        x: number;
        /** 垂直位移，单位为半个画布高 */
        y: number;
    };
}

// ==================== 特效和参数类型定义 ====================

/**
 * 特效参数信息
 */
export interface EffectParam {
    /** 参数名称 */
    name: string;
    /** 默认值 */
    default_value: number;
    /** 最小值 */
    min_value: number;
    /** 最大值 */
    max_value: number;
}

/**
 * 特效参数实例
 */
export interface EffectParamInstance extends EffectParam {
    /** 参数索引 */
    index: number;
    /** 当前值 */
    value: number;
}

/**
 * 特效元数据, 直接用于滤镜/文字/视频特效
 */
export interface EffectMeta {
    /** 效果名称 */
    name: string;
    /** 是否为VIP特权 */
    is_vip: boolean;
    /** 资源ID */
    resource_id: string;
    /** 效果ID */
    effect_id: string;
    /** MD5校验值 */
    md5: string;
    /** 效果的参数信息 */
    params: EffectParam[];
}

/**
 * 动画元数据, 用于视频/文字片段的入场/出场/组合动画
 */
export interface AnimationMeta {
    /** 动画标题 */
    title: string;
    /** 是否为VIP特权 */
    is_vip: boolean;
    /** 效果默认时长, 单位为微秒 */
    duration: number;
    /** 资源ID */
    resource_id: string;
    /** 效果ID */
    effect_id: string;
    /** MD5校验值 */
    md5: string;
}

/**
 * 蒙版元数据
 */
export interface MaskMeta {
    /** 蒙版名称 */
    name: string;
    /** 资源类型, 与蒙版形状相关 */
    resource_type: string;
    /** 资源ID */
    resource_id: string;
    /** 效果ID */
    effect_id: string;
    /** MD5校验值 */
    md5: string;
    /** 默认宽高比(宽高都是相对素材的比例) */
    default_aspect_ratio: number;
}

/**
 * 转场元数据
 */
export interface TransitionMeta {
    /** 转场名称 */
    name: string;
    /** 是否为VIP特权 */
    is_vip: boolean;
    /** 资源ID */
    resource_id: string;
    /** 效果ID */
    effect_id: string;
    /** MD5校验值 */
    md5: string;
    /** 默认持续时间, 单位为微秒 */
    default_duration: number;
    /** 是否允许重叠(?) */
    is_overlap: boolean;
}

// ==================== 文本相关类型定义 ====================

/**
 * 字体样式类
 */
/**
 * 文本内容接口定义
 */
export interface TextContent {
    id: string;
    text: string;
    styles: Array<{
        fill: {
            alpha: number;
            content: {
                render_type: string;
                solid: {
                    alpha: number;
                    color: [number, number, number];
                };
            };
        };
        range: [number, number];
        size: number;
        bold: boolean;
        italic: boolean;
        underline: boolean;
        strokes: Array<{
            width: number;
            content: {
                solid: {
                    alpha: number;
                    color: [number, number, number];
                };
            };
        }>;
    }>;
}

/**
 * 文本气泡素材, 与滤镜素材本质上一致
 */
export interface TextBubble {
    /** 气泡全局id, 由程序自动生成 */
    global_id: string;
    /** 效果ID */
    effect_id: string;
    /** 资源ID */
    resource_id: string;
}

/**
 * 文本花字素材, 与滤镜素材本质上也一致
 */
export interface TextEffect extends TextBubble {
    // 继承 TextBubble 的所有属性
}

// ==================== 音频相关类型定义 ====================

/**
 * 音频淡入淡出效果
 */
export interface AudioFade {
    /** 淡入淡出效果的全局id, 自动生成 */
    fade_id: string;
    /** 淡入时长, 单位为微秒 */
    in_duration: number;
    /** 淡出时长, 单位为微秒 */
    out_duration: number;
}

/**
 * 音频特效对象
 */
export interface AudioEffect {
    /** 特效名称 */
    name: string;
    /** 特效全局id, 由程序自动生成 */
    effect_id: string;
    /** 资源id, 由剪映本身提供 */
    resource_id: string;
    /** 特效类别ID */
    category_id: 'sound_effect' | 'tone' | 'speech_to_song';
    /** 特效类别名称 */
    category_name: '场景音' | '音色' | '声音成曲';
    /** 特效类别索引 */
    category_index: 1 | 2 | 3;
    /** 音频调节参数 */
    audio_adjust_params: EffectParamInstance[];
}

/**
 * 音频素材实例接口
 * 这里先定义基础结构，具体实现可能需要根据实际的 AudioMaterial 类型调整
 */
export interface AudioMaterial {
    /** 素材ID */
    material_id: string;
    /** 音频文件路径 */
    src: string;
    /** 音频名称 */
    name: string;
    /** 音频时长 */
    duration: number;
    /** 音频格式 */
    format: string;
    /** 采样率 */
    sample_rate?: number;
}

// ==================== 视频特效类型定义 ====================

/**
 * 视频特效素材
 */
export interface VideoEffect {
    /** 特效全局id, 由程序自动生成 */
    global_id: string;
    /** 特效名称 */
    name: string;
    /** 是否为VIP特权 */
    is_vip: boolean;
    /** 资源ID */
    resource_id: string;
    /** 效果ID */
    effect_id: string;
    /** MD5校验值 */
    md5: string;
    /** 效果的参数信息 */
    params: EffectParam[];
}

/**
 * 滤镜素材
 */
export interface Filter {
    /** 滤镜全局id, 由程序自动生成 */
    global_id: string;
    /** 滤镜名称 */
    name: string;
    /** 是否为VIP特权 */
    is_vip: boolean;
    /** 资源ID */
    resource_id: string;
    /** 效果ID */
    effect_id: string;
    /** MD5校验值 */
    md5: string;
    /** 效果的参数信息 */
    params: EffectParam[];
}

// ==================== 操作数据结构定义 ====================

/**
 * 动画参数接口
 */
export interface AnimationParams {
    /** 动画类别：入场、出场等 */
    animation_category: 'intro' | 'outro' | string;
    /** 动画类型 */
    animation_type: string;
    /** 动画持续时间 */
    duration: string;
}

/**
 * 背景填充参数接口
 */
export interface BackgroundFillingParams {
    /** 填充类型 */
    fill_type: 'blur' | string;
    /** 模糊量 */
    blur_amount: number;
    /** 颜色值 */
    color: string;
}

/**
 * 特效参数接口
 */
export interface EffectParams {
    /** 特效类型 */
    effect_type: string;
    /** 特效参数数组 */
    effect_params: number[];
}

/**
 * 滤镜参数接口
 */
export interface FilterParams {
    /** 滤镜类型 */
    filter_type: string;
    /** 滤镜参数对象 */
    filter_params: {
        /** 强度值 */
        intensity: number;
        [key: string]: any;
    };
}

/**
 * 关键帧参数接口
 */
export interface KeyframeParams {
    /** 属性名称 */
    attribute: string;
    /** 时间偏移 */
    time_offset: number;
    /** 属性值 */
    value: number;
}

/**
 * 蒙版参数接口
 */
export interface MaskParams {
    /** 蒙版类型 */
    mask_type: string;
    /** X中心坐标 */
    center_x: number;
    /** Y中心坐标 */
    center_y: number;
    /** 蒙版大小 */
    size: number;
    /** 旋转角度 */
    rotation: number;
    /** 羽化值 */
    feather: number;
    /** 是否反转 */
    invert: boolean;
}

/**
 * 转场参数接口
 */
export interface TransitionParams {
    /** 转场类型 */
    transition_type: string;
    /** 转场持续时间 */
    duration: string;
}

/**
 * 操作类型联合
 */
export type OperationType = 'animation' | 'background_filling' | 'effect' | 'filter' | 'keyframe' | 'mask' | 'transition';

/**
 * 操作参数联合类型
 */
export type OperationParams = AnimationParams | BackgroundFillingParams | EffectParams | FilterParams | KeyframeParams | MaskParams | TransitionParams;

/**
 * 操作项接口
 */
export interface OperationItem {
    /** 操作类型 */
    operation_type: OperationType;
    /** 操作参数 */
    params: OperationParams;
}

/**
 * 操作列表接口
 */
export interface OperationsList {
    /** 操作数组 */
    operations: OperationItem[];
}
